←Select platform

RemapHueCommand Constructor(int[],int[],int[],int[],int)

Summary
Initializes a new RemapHueCommand class object with explicit parameters.
Syntax
C#
Objective-C
C++/CLI
Java
Python
public RemapHueCommand( 
   int[] mask, 
   int[] hueTable, 
   int[] saturationTable, 
   int[] valueTable, 
   int lookUpTableLength 
) 
- (instancetype)initWithMask:(nullable const unsigned int *)mask hueTable:(nullable const unsigned int *)hueTable saturationTable:(nullable const unsigned int *)saturationTable valueTable:(nullable const unsigned int *)valueTable lookUpTableLength:(NSUInteger)lookUpTableLength NS_DESIGNATED_INITIALIZER; 
public RemapHueCommand( 
   int[] mask, 
   int[] hueTable, 
   int[] saturationTable, 
   int[] valueTable, 
   int lookUpTableLength 
); 
public: 
RemapHueCommand(  
   array<int>^ mask, 
   array<int>^ hueTable, 
   array<int>^ saturationTable, 
   array<int>^ valueTable, 
   int lookUpTableLength 
) 
__init__(self,mask,hueTable,saturationTable,valueTable,lookUpTableLength) # Overloaded constructor 

Parameters

mask
Lookup table that identifies which values in the hueTable, saturationTable and valueTable are valid. If Mask[i] is non-zero, then hueTable, saturationTable and valueTable are to be used. If Mask[i] is 0 then hueTable, saturationTable and valueTable are ignored. If Mask is null, all entries in the hueTable, saturationTable and valueTable are used.

hueTable
Hue look up table. If the Mask table value for a particular pixel hue is non-zero, then the hue is changed to the corresponding entry in hueTable. For example, if a pixel value has a hue of 85 and Mask[85] is non-zero, the hue is changed to hueTable[85]. If hueTable is null, the hue of each pixel is unchanged.

saturationTable
Saturation look up table. If the Mask table value for a particular pixel hue is non-zero, then the saturation is changed to the corresponding entry in saturationTable. For example, if a pixel value has a hue of 85 and Mask[85] is non-zero, the saturation is changed to saturationTable[85]. If hueTable is null, the saturation is changed to saturationTable[85]. If saturationTable is null, the saturation of each pixel is unchanged.

valueTable
Value look up table. If the Mask table value for a particular pixel hue is non-zero, then the value is changed to the corresponding entry in valueTable. For example, if a pixel value has a hue of 85 and Mask[85] is non-zero, the value is changed to valueTable[85]. If hueTable is null, the value is changed to ValueTable[85]. If valueTable is null, the value of each pixel is unchanged.

lookUpTableLength
Length of the lookup table. Possible values are 65536 for 16-bit image, 4096 for 12-bit image, 256 for 8-bit image

Example
C#
Java
using Leadtools; 
using Leadtools.Codecs; 
using Leadtools.ImageProcessing.Color; 
 
 
public int INCREMENT_S1(int x, int Length) 
{ 
   return ((x + 1) % Length); 
} 
 
public int DECREMENT_S1(int x, int Length) 
{ 
   return ((x + (Length - 1)) % Length); 
} 
 
public int ADD_S1(int x, int y, int Length) 
{ 
   return ((x + y) % Length); 
} 
 
public void RemapHueCommandCommandExample() 
{ 
   // Load an image 
   RasterCodecs codecs = new RasterCodecs(); 
   codecs.ThrowExceptionsOnInvalidImages = true; 
 
   RasterImage image = codecs.Load(Path.Combine(LEAD_VARS.ImagesDir, "cannon.jpg")); 
 
   // Prepare the command 
   int[] MaskTable; 
   int[] HueTable; 
   RasterHsvColor hsvRef; 
   int HueGreen, HueChange; 
   int Change; 
   int i, Count; 
   int Length; 
 
   if (image.BitsPerPixel >= 48) 
      Length = 0x10000; 
   else if (!(image.BitsPerPixel == 16 || image.BitsPerPixel == 12)) 
      Length = 256; 
   else if (image.GetLookupTable() != null && image.UseLookupTable) 
      Length = 256; 
   else 
      Length = (1 << image.BitsPerPixel); 
 
   //Allocate tables 
   MaskTable = new int[Length]; 
   HueTable = new int[Length]; 
 
   //Initialize tables 
   for (i = 0; i < Length; i++) 
   { 
      MaskTable[i] = 0; 
      HueTable[i] = i; 
   } 
 
   //Get the hue for green 
   hsvRef = RasterHsvColor.FromRasterColor(new RasterColor(0, 255, 0)); 
 
   HueGreen = hsvRef.H; 
 
   //Obtain new hue   
   hsvRef = RasterHsvColor.FromRasterColor(new RasterColor(255, 128, 0)); 
   Change = (int)hsvRef.H - (int)HueGreen; 
   HueChange = (Change > 0) ? (int)Change : (int)(Change + Length - 1); 
   HueGreen *= (Length - 1) / 255; 
   HueChange *= (Length - 1) / 255; 
 
   //Set values in HueTable, MaskTable  
   HueTable[HueGreen] = (HueTable[HueGreen] + HueChange); 
   MaskTable[HueGreen] = 1; 
 
   //set the hues near green (+/- 15) 
   Count = (15 * (Length - 1)) / 255; 
   for (i = INCREMENT_S1(HueGreen, Length); Count > 0; i = INCREMENT_S1(i, Length), Count--) 
   { 
      HueTable[i] = ADD_S1(HueTable[i], HueChange, Length); 
      MaskTable[i] = 1; 
   } 
 
   Count = (15 * (Length - 1)) / 255; 
   for (i = DECREMENT_S1(HueGreen, Length); Count > 0; i = DECREMENT_S1(i, Length), Count--) 
   { 
      HueTable[i] = ADD_S1(HueTable[i], HueChange, Length); 
      MaskTable[i] = 1; 
   } 
 
   RemapHueCommand command = new RemapHueCommand(MaskTable, HueTable, null, null, Length); 
   command.Run(image); 
   codecs.Save(image, Path.Combine(LEAD_VARS.ImagesDir, "Result.jpg"), RasterImageFormat.Jpeg, 24); 
 
} 
 
static class LEAD_VARS 
{ 
   public const string ImagesDir = @"C:\LEADTOOLS23\Resources\Images"; 
} 
 
import static org.junit.Assert.assertTrue; 
 
import java.io.File; 
import java.io.IOException; 
 
import org.junit.*; 
import org.junit.runner.JUnitCore; 
import org.junit.runner.Result; 
import org.junit.runner.notification.Failure; 
 
import leadtools.*; 
import leadtools.codecs.*; 
import leadtools.imageprocessing.color.*; 
 
 
public int INCREMENT_S1(int x, int Length) { 
    return ((x + 1) % Length); 
} 
 
public int DECREMENT_S1(int x, int Length) { 
    return ((x + (Length - 1)) % Length); 
} 
 
public int ADD_S1(int x, int y, int Length) { 
    return ((x + y) % Length); 
} 
 
public void remapHueCommandCommandExample() { 
    final String LEAD_VARS_IMAGES_DIR = "C:\\LEADTOOLS23\\Resources\\Images"; 
 
    // Load an image 
    RasterCodecs codecs = new RasterCodecs(); 
    codecs.setThrowExceptionsOnInvalidImages(true); 
 
    RasterImage image = codecs.load(combine(LEAD_VARS_IMAGES_DIR, "cannon.jpg")); 
 
    // Prepare the command 
    int length; 
    if (image.getBitsPerPixel() >= 48) 
        length = 0x10000; 
    else if (!(image.getBitsPerPixel() == 16 || image.getBitsPerPixel() == 12)) 
        length = 256; 
    else if (image.getLookupTable() != null && image.getUseLookupTable()) 
        length = 256; 
    else 
        length = (1 << image.getBitsPerPixel()); 
 
    // Allocate tables 
    int[] maskTable = new int[length]; 
    int[] hueTable = new int[length]; 
 
    // Initialize tables 
    for (int i = 0; i < length; i++) { 
        maskTable[i] = 0; 
        hueTable[i] = i; 
    } 
 
    // Get the hue for green 
    RasterHsvColor hsvRef = RasterHsvColor.fromRasterColor(new RasterColor(0, 255, 0)); 
    int hueGreen = hsvRef.getH(); 
 
    // Obtain new hue 
    hsvRef = RasterHsvColor.fromRasterColor(new RasterColor(255, 128, 0)); 
    int change = (int) hsvRef.getH() - (int) hueGreen; 
    int hueChange = (change > 0) ? (int) change : (int) (change + length - 1); 
    hueGreen *= (length - 1) / 255; 
    hueChange *= (length - 1) / 255; 
 
    // Set values in HueTable, MaskTable 
    hueTable[hueGreen] = (hueTable[hueGreen] + hueChange); 
    maskTable[hueGreen] = 1; 
 
    // Set the hues near green (+/- 15) 
    int count = (15 * (length - 1)) / 255; 
    for (int i = INCREMENT_S1(hueGreen, length); count > 0; i = INCREMENT_S1(i, length), count--) { 
        hueTable[i] = ADD_S1(hueTable[i], hueChange, length); 
        maskTable[i] = 1; 
    } 
 
    count = (15 * (length - 1)) / 255; 
    for (int i = DECREMENT_S1(hueGreen, length); count > 0; i = DECREMENT_S1(i, length), count--) { 
        hueTable[i] = ADD_S1(hueTable[i], hueChange, length); 
        maskTable[i] = 1; 
    } 
 
    RemapHueCommand command = new RemapHueCommand(); 
    command.setMask(maskTable); 
    command.setHueTable(hueTable); 
    command.setSaturationTable(null); 
    command.setValueTable(null); 
    command.setLookUpTableLength(length); 
    command.run(image); 
    codecs.save(image, combine(LEAD_VARS_IMAGES_DIR, "Result.jpg"), RasterImageFormat.JPEG, 24); 
 
    System.out.println("Command run and image saved to " + combine(LEAD_VARS_IMAGES_DIR, "Result.jpg")); 
    assertTrue("Command run and image saved", (new File(combine(LEAD_VARS_IMAGES_DIR, "Result.jpg")).exists())); 
} 
Requirements

Target Platforms

Help Version 23.0.2024.3.3
Products | Support | Contact Us | Intellectual Property Notices
© 1991-2024 LEAD Technologies, Inc. All Rights Reserved.

Leadtools.ImageProcessing.Color Assembly
Products | Support | Contact Us | Intellectual Property Notices
© 1991-2023 LEAD Technologies, Inc. All Rights Reserved.